(function($){$.isNumeric==null&&($.isNumeric=function(src){return src!=null&&src.constructor===Number;});$.isFunction==null&&($.isFunction=function(src){return src!=null&&src instanceof Function;});var $W=$(window);var $D=$(document);var layoutManager={defaultConfig:{animate:false,cache:true,cellW:100,cellH:100,delay:0,engine:'giot',fixSize:null,gutterX:15,gutterY:15,selector:'> div',draggable:false,rightToLeft:false,bottomToTop:false,onGapFound:function(){},onComplete:function(){},onResize:function(){},onBlockReady:function(){},onBlockFinish:function(){},onBlockActive:function(){}},plugin:{},totalGrid:1,transition:false,loadBlock:function(item,setting){var runtime=setting.runtime;var gutterX=runtime.gutterX;var gutterY=runtime.gutterY;var cellH=runtime.cellH;var cellW=runtime.cellW;var block=null;var $item=$(item);var active=$item.data("active");var fixPos=$item.attr('data-position');var fixSize=parseInt($item.attr('data-fixSize'));var blockId=runtime.lastId++ +'-'+runtime.totalGrid;if($item.hasClass('fw-float'))return;$item.attr({id:blockId,'data-delay':item.index});if(setting.animate&&this.transition){this.setTransition(item,"");} $item.attr('data-height')==null&&$item.attr('data-height',$item.height());$item.attr('data-width')==null&&$item.attr('data-width',$item.width());var height=1*$item.attr('data-height');var width=1*$item.attr('data-width');if(!setting.cache){item.style.width="";width=$item.width();item.style.height="";height=$item.height();} var col=!width?0:Math.round((width+gutterX)/cellW);var row=!height?0:Math.round((height+gutterY)/cellH);isNaN(fixSize)&&(fixSize=null);if(!fixSize&&setting.cellH=='auto'){$item.width(cellW*col-gutterX);item.style.height="";height=$item.height();row=!height?0:Math.round((height+gutterY)/cellH);} if(!fixSize&&setting.cellW=='auto'){$item.height(cellH*row-gutterY);item.style.width="";width=$item.width();col=!width?0:Math.round((width+gutterX)/cellW);} if((fixSize!=null)&&(col>runtime.limitCol||row>runtime.limitRow)){block=null;}else{row&&rowruntime.maxHoB&&(runtime.maxHoB=row);col>runtime.maxWoB&&(runtime.maxWoB=col);width==0&&(col=0);height==0&&(row=0);block={id:blockId,width:col,height:row,fixSize:fixSize};if(fixPos){fixPos=fixPos.split("-");block.y=1*fixPos[0];block.x=1*fixPos[1];block.width=fixSize!=null?col:Math.min(col,runtime.limitCol-block.x);block.height=fixSize!=null?row:Math.min(row,runtime.limitRow-block.y);var holeId=block.y+"-"+block.x+"-"+block.width+"-"+block.height;if(active){runtime.holes[holeId]={id:block.id,top:block.y,left:block.x,width:block.width,height:block.height};this.setBlock(block,setting);}else{delete runtime.holes[holeId];}}} if($item.attr("data-state")==null){$item.attr("data-state","init");}else{$item.attr("data-state","move");} setting.onBlockReady.call(item,block,setting);return(fixPos&&active)?null:block;},setBlock:function(block,setting){var runtime=setting.runtime;var gutterX=runtime.gutterX;var gutterY=runtime.gutterY;var height=block.height;var width=block.width;var cellH=runtime.cellH;var cellW=runtime.cellW;var x=block.x;var y=block.y;if(setting.rightToLeft){x=runtime.limitCol-x-width;} if(setting.bottomToTop){y=runtime.limitRow-y-height;} var realBlock={fixSize:block.fixSize,top:y*cellH,left:x*cellW,width:cellW*width-gutterX,height:cellH*height-gutterY};realBlock.top=1*realBlock.top.toFixed(2);realBlock.left=1*realBlock.left.toFixed(2);realBlock.width=1*realBlock.width.toFixed(2);realBlock.height=1*realBlock.height.toFixed(2);block.id&&(runtime.blocks[block.id]=realBlock);return realBlock;},showBlock:function(item,setting){var runtime=setting.runtime;var method=setting.animate&&!this.transition?'animate':'css';var block=runtime.blocks[item.id];var $item=$(item);var self=this;var start=$item.attr("data-state")!="move";var trans=start?"width 0.5s, height 0.5s":"top 0.5s, left 0.5s, width 0.5s, height 0.5s, opacity 0.5s";item.delay&&clearTimeout(item.delay);if($item.hasClass('fw-float'))return;self.setTransition(item,"");item.style.position="absolute";setting.onBlockActive.call(item,block,setting);function action(){start&&$item.attr("data-state","start");if(setting.animate&&self.transition){self.setTransition(item,trans);} if(!block){var height=parseInt(item.style.height)||0;var width=parseInt(item.style.width)||0;var left=parseInt(item.style.left)||0;var top=parseInt(item.style.top)||0;$item[method]({left:left+width/2,top:top+height/2,width:0,height:0,opacity:0});}else{if(block.fixSize){block.height=1*$item.attr("data-height");block.width=1*$item.attr("data-width");} $item["css"]({opacity:1,width:block.width,height:block.height});$item[method]({top:block.top,left:block.left});if($item.attr('data-nested')!=null){self.nestedGrid(item,setting);}} runtime.length-=1;setting.onBlockFinish.call(item,block,setting);runtime.length==0&&setting.onComplete.call(item,block,setting);} setting.delay>0?(item.delay=setTimeout(action,setting.delay*$item.attr("data-delay"))):action();},nestedGrid:function(item,setting){var innerWall,$item=$(item),runtime=setting.runtime;var gutterX=$item.attr("data-gutterX")||setting.gutterX;var gutterY=$item.attr("data-gutterY")||setting.gutterY;var method=$item.attr("data-method")||"fitZone";var nested=$item.attr('data-nested')||"> div";var cellH=$item.attr("data-cellH")||setting.cellH;var cellW=$item.attr("data-cellW")||setting.cellW;var block=runtime.blocks[item.id];if(block){innerWall=new freewall($item);innerWall.reset({cellH:cellH,cellW:cellW,gutterX:1*gutterX,gutterY:1*gutterY,selector:nested});switch(method){case "fitHeight":innerWall[method](block.height);break;case "fitWidth":innerWall[method](block.width);break;case "fitZone":innerWall[method](block.width,block.height);break;}}},adjustBlock:function(block,setting){var runtime=setting.runtime;var gutterX=runtime.gutterX;var gutterY=runtime.gutterY;var $item=$("#"+block.id);var cellH=runtime.cellH;var cellW=runtime.cellW;if(setting.cellH=='auto'){$item.width(block.width*cellW-gutterX);$item[0].style.height="";block.height=Math.round(($item.height()+gutterY)/cellH);}},adjustUnit:function(width,height,setting){var gutterX=setting.gutterX;var gutterY=setting.gutterY;var runtime=setting.runtime;var cellW=setting.cellW;var cellH=setting.cellH;$.isFunction(cellW)&&(cellW=cellW(width));cellW=1*cellW;!$.isNumeric(cellW)&&(cellW=1);$.isFunction(cellH)&&(cellH=cellH(height));cellH=1*cellH;!$.isNumeric(cellH)&&(cellH=1);if($.isNumeric(width)){cellW<1&&(cellW=cellW*width);var limitCol=Math.max(1,Math.floor(width/cellW));if(!$.isNumeric(gutterX)){gutterX=(width-limitCol*cellW)/Math.max(1,(limitCol-1));gutterX=Math.max(0,gutterX);} limitCol=Math.floor((width+gutterX)/cellW);runtime.cellW=(width+gutterX)/Math.max(limitCol,1);runtime.cellS=runtime.cellW/cellW;runtime.gutterX=gutterX;runtime.limitCol=limitCol;} if($.isNumeric(height)){cellH<1&&(cellH=cellH*height);var limitRow=Math.max(1,Math.floor(height/cellH));if(!$.isNumeric(gutterY)){gutterY=(height-limitRow*cellH)/Math.max(1,(limitRow-1));gutterY=Math.max(0,gutterY);} limitRow=Math.floor((height+gutterY)/cellH);runtime.cellH=(height+gutterY)/Math.max(limitRow,1);runtime.cellS=runtime.cellH/cellH;runtime.gutterY=gutterY;runtime.limitRow=limitRow;} if(!$.isNumeric(width)){cellW<1&&(cellW=runtime.cellH);runtime.cellW=cellW!=1?cellW*runtime.cellS:1;runtime.gutterX=gutterX;runtime.limitCol=666666;} if(!$.isNumeric(height)){cellH<1&&(cellH=runtime.cellW);runtime.cellH=cellH!=1?cellH*runtime.cellS:1;runtime.gutterY=gutterY;runtime.limitRow=666666;}},resetGrid:function(runtime){runtime.blocks={};runtime.length=0;runtime.cellH=0;runtime.cellW=0;runtime.lastId=1;runtime.matrix={};runtime.totalCol=0;runtime.totalRow=0;},setDraggable:function(item,option){var isTouch=false;var config={startX:0,startY:0,top:0,left:0,handle:null,onDrop:function(){},onDrag:function(){},onStart:function(){}};$(item).each(function(){var setting=$.extend({},config,option);var handle=setting.handle||this;var ele=this;var $E=$(ele);var $H=$(handle);var posStyle=$E.css("position");posStyle!="absolute"&&$E.css("position","relative");function mouseDown(evt){evt.stopPropagation();evt=evt.originalEvent;if(evt.touches){isTouch=true;evt=evt.changedTouches[0];} if(evt.button!=2&&evt.which!=3){setting.onStart.call(ele,evt);setting.startX=evt.clientX;setting.startY=evt.clientY;setting.top=parseInt($E.css("top"))||0;setting.left=parseInt($E.css("left"))||0;$D.bind("mouseup touchend",mouseUp);$D.bind("mousemove touchmove",mouseMove);} return false;};function mouseMove(evt){evt=evt.originalEvent;isTouch&&(evt=evt.changedTouches[0]);$E.css({top:setting.top-(setting.startY-evt.clientY),left:setting.left-(setting.startX-evt.clientX)});setting.onDrag.call(ele,evt);};function mouseUp(evt){evt=evt.originalEvent;isTouch&&(evt=evt.changedTouches[0]);setting.onDrop.call(ele,evt);$D.unbind("mouseup touchend",mouseUp);$D.unbind("mousemove touchmove",mouseMove);};$E.find("iframe, form, input, textarea, .ignore-drag").each(function(){$(this).on("touchstart mousedown",function(evt){evt.stopPropagation();});});$D.unbind("mouseup touchend",mouseUp);$D.unbind("mousemove touchmove",mouseMove);$H.unbind("mousedown touchstart").bind("mousedown touchstart",mouseDown);});},setTransition:function(item,trans){var style=item.style;var $item=$(item);if(!this.transition&&$item.stop){$item.stop();}else if(style.webkitTransition!=null){style.webkitTransition=trans;}else if(style.MozTransition!=null){style.MozTransition=trans;}else if(style.msTransition!=null){style.msTransition=trans;}else if(style.OTransition!=null){style.OTransition=trans;}else{style.transition=trans;}},getFreeArea:function(t,l,runtime){var maxY=Math.min(t+runtime.maxHoB,runtime.limitRow);var maxX=Math.min(l+runtime.maxWoB,runtime.limitCol);var minX=maxX;var minY=maxY;var matrix=runtime.matrix;for(var y=t;ymaxX&&(maxX=x);} ++y>maxY&&(maxY=y);}} for(var i in holes){if(holes.hasOwnProperty(i)){fillMatrix(holes[i]["id"]||true,holes[i]['top'],holes[i]['left'],holes[i]['width'],holes[i]['height']);}} for(var b=0;bfreeArea.height)continue;if(items[i].width>freeArea.width)continue;block=items.splice(i,1)[0];break;} if(block==null&&setting.fixSize==null){if(lastBlock&&!fitWidth&&runtime.minHoB>freeArea.height){lastBlock.height+=freeArea.height;fillMatrix(lastBlock.id,lastBlock.y,lastBlock.x,lastBlock.width,lastBlock.height);layoutManager.setBlock(lastBlock,setting);continue;}else if(lastBlock&&fitWidth&&runtime.minWoB>freeArea.width){lastBlock.width+=freeArea.width;fillMatrix(lastBlock.id,lastBlock.y,lastBlock.x,lastBlock.width,lastBlock.height);layoutManager.setBlock(lastBlock,setting);continue;}else{for(var i=0;i